普通安全架構轉型微服務安全架構的技術有以下這些:
共享庫:如果兩個服務想要共用一些代碼,那么這些代碼就可以被提取并放到一個共享庫中。共享庫體現的是一種代碼復用思想,公共代碼從某一個服務移到共享庫就可以被其他服務所使用。共享庫實施過程中的主要挑戰在于如何判斷某些代碼應該移到共享庫而不是放在本地服務中。微服務架構實際上并不是非常關注代碼復用,因為代碼復用會導致服務與服務之間產生新的依賴。
共享服務:共享服務的思路與共享庫類似,只不過在共享服務中,被提取的代碼并不是放到一個獨立的公共庫中,而是直接轉移給了另一個服務。與共享庫相比,共享服務的優勢在于不用產生新的依賴關系,因為服務與服務之間的交互方式并沒有任何改變,而服務內部的任何調整并不會產生架構上的影響。共享服務是保持服務大小合理性的一種手段,借助共享服務機制,我們可以對規模比較大的服務進行“瘦身”。
代碼轉移:從一個微服務中抽取一部分代碼放到另一個微服務中的做法稱為代碼轉移。通常,我們進行代碼轉移的主要目的是為了降低兩個微服務之間的耦合,提高單個服務的內聚度。當一個微服務需要依賴另一個微服務完成某個功能時,我們認為兩者具有一定耦合度,當把兩者之間的交互部分代碼進行轉移之后,這種耦合度就能得到緩解。
代碼冗余:與其把代碼轉移到另一個微服務,有時候我們也會選擇代碼冗余的方式降低服務與服務之間的耦合度。在主流的方法論中,普遍認為代碼冗余是一項反模式,因為當代碼被冗余在兩個地方時,一旦有問題就需要同時修正這兩個地方。這是一個架構腐化的危險信號,所以我們一般都盡量避免重復代碼的產生。但在微服務架構中,代碼冗余有一個非常明顯的優勢,即兩個微服務之間能夠保證高度的獨立性,從而實現微服務架構所提倡的獨立部署。
提取新服務:提取新服務具有與共享服務同樣的優點和缺點,但是兩者具有不同的初衷。當一個服務的規模逐漸增大,提取新服務的目的在于通過減小服務的規模從而降低服務的維護成本,或者把該服務所承載的一部分職責轉移到另一個團隊。這時候,這個新服務就不會像共享服務那樣被多個服務所共同依賴。
重寫服務:相較其他的架構設計方法,微服務架構中的重寫并不是一件非常困難的事情,因為微服務的規模較小,同時具備明確的服務契約。我們有時候會鼓勵重寫服務,一方面可能來自于技術體系的發展和演進,使用新技術重寫一個老服務會帶來更好的發展前景。另一個更重要的方面,重寫服務驅使我們再次審視服務背后的領域模型,從而為該領域模型提供一種嶄新的、更好的實現。